objective-c 委托与协议

协议会制定若干的接口,这些接口并不需要自己实现,由遵守这个协议的类来实现。

1.协议的定义:

@protocol MyProtocol <NSObject>
/* 若干接口(形式和类是一样的) */
-(void)function;
@end 

一旦一个类被制定遵守这个协议,那么它就有责任去实现协议中的接口,不实现的话,xcode会给出警告。

2.设置托管变量,这个变量放在触发协议的类中,也就是说这个类是决定调用协议接口的“时机”的

id<MyProtocol> delegate;

3.触发协议.当你什么需要实现协议中的方法的时候,可以这样调用

[delegate function];

4.遵守协议,这个类可以作为前面“触发协议的类”的“委托”类,他是帮助前者实现协议中的需求的

@interface Implclass:NSObject<MyProtocol> 

5.实现方法,在“委托类”的实现部分加入接口的实现

-(void)funciton
{
//do something
}

6.指派委托,需要将delegate赋值为Implclass

具体例子:

假如baby想吃奶,这时候需要妈妈,就将需求(协议),委托给妈妈来做,让妈妈来帮助

@protocol baby_request <NSObject>

//吃奶
-(void)milk;

@end

//baby类
@interface Baby:NSObject
{
    id<baby_request> somebody;
}

@property (nonatomic,assign) id<baby_request> somebody;
//想吃奶
-(void)wantmilk;

@end

@implementation Baby

@synthesize somebody;

-(void)wantmilk
{
    [somebody milk];
}

@end

//母亲类
@interface Mother:NSObject<baby_request>

@end

@implementation Mother

//喂奶
-(void)milk
{
    NSLog(@"feed milk ");
}

@end

int main (int argc, const char * argv[])
{

    @autoreleasepool {
        
        // insert code here...
        NSLog(@"has a bady want milk");
        Baby *baby = [[Baby alloc]init];
        Mother *mother = [[Mother alloc]init];
        [baby setSomebody:mother];
        [baby wantmilk];
        [baby release];
        [mother release];
    }
    return 0;
}

posted on 2012-07-16 21:56  z-9  阅读(363)  评论(0编辑  收藏  举报

导航